package 算法.lib;

import java.util.List;

/*给你一个由小写英文字母组成的字符串 s，一个整数 t 表示要执行的 转换 次数，以及一个长度为 26 的数组 nums。
每次 转换 需要根据以下规则替换字符串 s 中的每个字符：
将 s[i] 替换为字母表中后续的 nums[s[i] - 'a'] 个连续字符。
例如，如果 s[i] = 'a' 且 nums[0] = 3，则字符 'a' 转换为它后面的 3 个连续字符，结果为 "bcd"。
如果转换超过了 'z'，则 回绕 到字母表的开头。例如，如果 s[i] = 'y' 且 nums[24] = 3，则字符 'y' 转换为它后面的 3 个连续字符，结果为 "zab"。
返回 恰好 执行 t 次转换后得到的字符串的 长度。
由于答案可能非常大，返回其对 109 + 7 取余的结果。 */

public class LengthAfterTransformations2 {
    public int lengthAfterTransformations2(String s, int t, List<Integer> nums) {
        for (int i = 0; i < t; i++) {
            StringBuilder sb = new StringBuilder();
            for (int j = 0; j < s.length(); j++) {
                char c = s.charAt(j);
                for (int k = 1; k <= nums.get(c - 'a'); k++) {
                    if (c + k > 'z') {
                        sb.append((char) (c + k - 'z' + 'a'-1));
                    } else {
                        sb.append((char) (c + k));
                    }
                }
            }
            s = sb.toString();
        }
        int mod = 1000000007;
        return s.length() % mod;
    }
}
